package controllers;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

import modelo.Clasificacionmenu;
import modelo.Detallemenu;
import modelo.Insumo;
import modelo.Menu;
import modelo.Propietario;
import modelo.Salon;
import modelo.Tipomenu;
import modelo.Unidadmedida;
import services.ClasificacionmenuService;
import services.InsumoService;
import services.MenuService;
import services.PropietarioService;
import services.SalonService;
import services.TipomenuService;
import services.UnidadMedidaService;


@ManagedBean(name = "menuBean")
@SessionScoped
public class MenuBean implements Serializable{

	private static final long serialVersionUID = -7267319135561739444L;

	@ManagedProperty("#{salonService}")
	private SalonService serviceSalon=new SalonService();
	private Salon salon=new Salon();
	
	@ManagedProperty("#{insumoService}")
    private InsumoService serviceInsumo;
	private List<Insumo> listInsumo;
	private Insumo insumoSelected;	
	
	@ManagedProperty("#{unidadMedidaService}")
    private UnidadMedidaService serviceUnidadMedida;
	private List<Unidadmedida> listUnidadMedida;
	private Unidadmedida unidadMedidaSelected;	
	
	@ManagedProperty("#{tipomenuService}")
    private TipomenuService serviceTipomenu;
	private List<Tipomenu> listTipomenu;
	private Tipomenu tipomenuSelected;
	
	@ManagedProperty("#{clasificacionmenuService}")
    private ClasificacionmenuService serviceClasificacionmenu;
	private List<Clasificacionmenu> listClasificacionmenu;
	private Clasificacionmenu clasificacionmenuSelected;
	
	@ManagedProperty("#{menuService}")
	private MenuService serviceMenu;
	
	private Menu menu;
	private Detallemenu detallemenu;
	private List<Detallemenu> listDetallemenu;
	private Detallemenu detallemenuSelected;
	
	private UploadedFile file;
	
	public MenuBean() {
		super();
		listInsumo=new ArrayList<Insumo>();
		insumoSelected=new Insumo();
		listUnidadMedida = new ArrayList<Unidadmedida>(); 
		unidadMedidaSelected=new Unidadmedida();
		listClasificacionmenu = new ArrayList<Clasificacionmenu>(); 
		clasificacionmenuSelected=new Clasificacionmenu();
		listTipomenu = new ArrayList<Tipomenu>(); 
		tipomenuSelected=new Tipomenu();		
		menu = new Menu();
		listDetallemenu = new ArrayList<Detallemenu>();
		detallemenu = new Detallemenu();
		detallemenuSelected = new Detallemenu();
	}

	@PostConstruct
	private void init() {
		listInsumo=serviceInsumo.getListaInsumo();
		listUnidadMedida=serviceUnidadMedida.getListaUnidades();
		listClasificacionmenu=serviceClasificacionmenu.getListaClasificacionmenu();
		listTipomenu=serviceTipomenu.getListaTipomenu();
		
        FacesContext context = javax.faces.context.FacesContext.getCurrentInstance();
        HttpSession sessionActual = (HttpSession) context.getExternalContext().getSession(false);
        Integer salonSel = null;
        
        if (sessionActual!= null)
        {  salonSel = Integer.parseInt(sessionActual.getAttribute("salon").toString());             
        
              salon=serviceSalon.obtenerSalon(salonSel);
        }
        else
        {
        	
        	
        }		
}

	public void agregarIngrediente() {
		detallemenu.setInsumo(insumoSelected);
		detallemenu.setUnidadmedida(unidadMedidaSelected);
		listDetallemenu.add(detallemenu);
		detallemenu = new Detallemenu();
	}	
	
    public void fileUploadListener(FileUploadEvent e){
        // Get uploaded file from the FileUploadEvent
        this.file = e.getFile();
    }
	
	public void eliminarIngrediente() {
		this.listDetallemenu.remove(detallemenuSelected);
	}	
	
	public String guardarMenu() throws Exception
	{
//		serviceSalon.guardarSalon(salon, domicilio);
//		persona.setTipodocumento(tipoDocumentoSelected);
//		domicilio.setBarrio(barrioSelected);
		menu.setSalon(salon);
		menu.setClasificacionmenu(clasificacionmenuSelected);
		menu.setTipomenu(tipomenuSelected);
		menu.setImagen(file.getContents());
		serviceMenu.guardarMenu(menu, listDetallemenu);
		menu=new Menu();
		return "MenuRegistrado";
		
	}
	
	public InsumoService getServiceInsumo() {
		return serviceInsumo;
	}

	public void setServiceInsumo(InsumoService serviceInsumo) {
		this.serviceInsumo = serviceInsumo;
	}

	public List<Insumo> getListInsumo() {
		return listInsumo;
	}

	public void setListInsumo(List<Insumo> listInsumo) {
		this.listInsumo = listInsumo;
	}

	public Insumo getInsumoSelected() {
		return insumoSelected;
	}

	public void setInsumoSelected(Insumo insumoSelected) {
		this.insumoSelected = insumoSelected;
	}

	public UnidadMedidaService getServiceUnidadMedida() {
		return serviceUnidadMedida;
	}

	public void setServiceUnidadMedida(UnidadMedidaService serviceUnidadMedida) {
		this.serviceUnidadMedida = serviceUnidadMedida;
	}

	public List<Unidadmedida> getListUnidadMedida() {
		return listUnidadMedida;
	}

	public void setListUnidadMedida(List<Unidadmedida> listUnidadMedida) {
		this.listUnidadMedida = listUnidadMedida;
	}

	public Unidadmedida getUnidadMedidaSelected() {
		return unidadMedidaSelected;
	}

	public void setUnidadMedidaSelected(Unidadmedida unidadMedidaSelected) {
		this.unidadMedidaSelected = unidadMedidaSelected;
	}

	public Menu getMenu() {
		return menu;
	}

	public void setMenu(Menu menu) {
		this.menu = menu;
	}

	public Detallemenu getDetallemenu() {
		return detallemenu;
	}

	public void setDetallemenu(Detallemenu detallemenu) {
		this.detallemenu = detallemenu;
	}

	public List<Detallemenu> getListDetallemenu() {
		return listDetallemenu;
	}

	public void setListDetallemenu(List<Detallemenu> listDetallemenu) {
		this.listDetallemenu = listDetallemenu;
	}

	public Detallemenu getDetallemenuSelected() {
		return detallemenuSelected;
	}

	public void setDetallemenuSelected(Detallemenu detallemenuSelected) {
		this.detallemenuSelected = detallemenuSelected;
	}

	public MenuService getServiceMenu() {
		return serviceMenu;
	}

	public void setServiceMenu(MenuService serviceMenu) {
		this.serviceMenu = serviceMenu;
	}

	public UploadedFile getFile() {
		return file;
	}

	public void setFile(UploadedFile file) {
		this.file = file;
	}

	public TipomenuService getServiceTipomenu() {
		return serviceTipomenu;
	}

	public void setServiceTipomenu(TipomenuService serviceTipomenu) {
		this.serviceTipomenu = serviceTipomenu;
	}

	public List<Tipomenu> getListTipomenu() {
		return listTipomenu;
	}

	public void setListTipomenu(List<Tipomenu> listTipomenu) {
		this.listTipomenu = listTipomenu;
	}

	public Tipomenu getTipomenuSelected() {
		return tipomenuSelected;
	}

	public void setTipomenuSelected(Tipomenu tipomenuSelected) {
		this.tipomenuSelected = tipomenuSelected;
	}

	public ClasificacionmenuService getServiceClasificacionmenu() {
		return serviceClasificacionmenu;
	}

	public void setServiceClasificacionmenu(
			ClasificacionmenuService serviceClasificacionmenu) {
		this.serviceClasificacionmenu = serviceClasificacionmenu;
	}

	public List<Clasificacionmenu> getListClasificacionmenu() {
		return listClasificacionmenu;
	}

	public void setListClasificacionmenu(
			List<Clasificacionmenu> listClasificacionmenu) {
		this.listClasificacionmenu = listClasificacionmenu;
	}

	public Clasificacionmenu getClasificacionmenuSelected() {
		return clasificacionmenuSelected;
	}

	public void setClasificacionmenuSelected(
			Clasificacionmenu clasificacionmenuSelected) {
		this.clasificacionmenuSelected = clasificacionmenuSelected;
	}

	public SalonService getServiceSalon() {
		return serviceSalon;
	}

	public void setServiceSalon(SalonService serviceSalon) {
		this.serviceSalon = serviceSalon;
	}

	public Salon getSalon() {
		return salon;
	}

	public void setSalon(Salon salon) {
		this.salon = salon;
	}



}
